import store from '@/store'
import axios from 'axios'
import router from '@/router'
import { Message } from 'element-ui'
import { getTimeStamp } from './auth'
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API
})

service.interceptors.request.use(config => {
// Do something before request is sent
  if (store.getters.token) {
    if (Date.now() - getTimeStamp() > 60 * 60 * 1000) {
      // 退出操作
      store.dispatch('user/logout')
      // 跳转
      router.push('/login')
      // 返回promise
      return Promise.reject(new Error('token超时'))
    }
    config.headers.Authorization = `Bearer ${store.getters.token}`
  }
  return config
}, error => {
// Do something with request error
  return Promise.reject(error)
})

service.interceptors.response.use(response => {
  const { success, message, data } = response.data
  if (success) {
    return data // 页面中.then或者await获取data,简化获取数据层级(response.data.data -> data)
  } else {
    // 错误2-服务器通过响应数据
    // 统一提示消息-通过组件方法
    Message(message)
    return Promise.reject(new Error(message)) // 页面中,.catch或者try-catch获取错误
  }
  // return response
}, error => {
  // 错误1-服务器响应头报错400,500
  // 统一提示消息-通过原型链
  // Vue.prototype.$message(error.message)
  // 统一提示消息-通过组件方法
  if (error && error.response.data && error.response.data.code === 10002) {
    // 退出操作
    store.dispatch('user/logout')
    // 跳转
    router.push('/login')
    // 返回promise
    return Promise.reject(new Error('token超时'))
  }
  Message(error.message)
  return Promise.reject(error)
})
export default service
